Academy

ইউনিট টেস্টিং

Microsoft Technologies - সি শার্প (C#) - NCTB BOOK

ইউনিট টেস্টিং হলো সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যা কোডের ছোট ছোট অংশ বা ইউনিটের কার্যকারিতা যাচাই করতে ব্যবহৃত হয়। সি#-এ ইউনিট টেস্টিং করার জন্য সাধারণত xUnit, NUnit, এবং MSTest ফ্রেমওয়ার্ক ব্যবহৃত হয়। ইউনিট টেস্টিং করার মাধ্যমে কোডের নির্ভুলতা নিশ্চিত করা এবং সহজে বাগ শনাক্ত করা সম্ভব হয়।

ইউনিট টেস্টিং এর উদ্দেশ্য

  • বাগ বা ত্রুটি শনাক্ত করা: কোডে ছোট ছোট অংশ বা ইউনিটে ভুল হলে তা সহজেই শনাক্ত করা।
  • কোডের মান বজায় রাখা: ইউনিট টেস্টিং কোডের মান বজায় রাখতে সাহায্য করে এবং নতুন ফিচার যুক্ত করার সময় বিদ্যমান ফাংশনালিটি ভাঙা থেকে রক্ষা করে।
  • ডকুমেন্টেশনের ভূমিকা: ইউনিট টেস্ট নিজেই একটি ডকুমেন্টেশনের মতো কাজ করে, যা বুঝতে সাহায্য করে একটি ফাংশন বা মেথড কীভাবে কাজ করছে।

xUnit ব্যবহার করে ইউনিট টেস্টিং

xUnit হলো C#-এ জনপ্রিয় একটি টেস্টিং ফ্রেমওয়ার্ক, যা ইউনিট টেস্ট লেখার জন্য সহজ এবং কার্যকরী। এটি Attribute-এর মাধ্যমে টেস্ট মেথডকে সনাক্ত করে।

ধাপ ১: টেস্ট প্রজেক্ট তৈরি করা

Visual Studio তে xUnit টেস্ট প্রজেক্ট তৈরি করতে:

  1. Solution Explorer এ প্রজেক্টের উপর রাইট-ক্লিক করুন এবং Add -> New Project নির্বাচন করুন।
  2. xUnit Test Project নির্বাচন করুন।
  3. প্রজেক্টের নাম দিন, উদাহরণস্বরূপ, "MyProject.Tests"।

ধাপ ২: xUnit প্যাকেজ ইনস্টল করা

যদি টেস্ট প্রজেক্টে xUnit আগে থেকেই ইনস্টল না থাকে, তবে NuGet Package Manager ব্যবহার করে xUnit ইনস্টল করুন।

Install-Package xunit
Install-Package xunit.runner.visualstudio

উদাহরণ: একটি সাধারণ ইউনিট টেস্ট

ধরা যাক, আমাদের একটি Calculator ক্লাস আছে যা দুটি সংখ্যা যোগ করে এবং রেজাল্ট প্রদান করে। এই মেথডের ইউনিট টেস্ট লিখবো।

Calculator ক্লাস

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

Calculator টেস্ট ক্লাস

using Xunit;

public class CalculatorTests
{
    [Fact]
    public void Add_ReturnsCorrectResult()
    {
        // Arrange
        var calculator = new Calculator();
        int a = 5;
        int b = 3;
        int expected = 8;

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.Equal(expected, result);
    }
}

ব্যাখ্যা

  • Arrange: টেস্টের জন্য প্রয়োজনীয় অবজেক্ট এবং ইনপুট প্রস্তুত করা হয়।
  • Act: টেস্ট মেথড চালানো হয় এবং রেজাল্ট সংগ্রহ করা হয়।
  • Assert: প্রত্যাশিত ফলাফল এবং টেস্ট রেজাল্ট যাচাই করা হয়।

[Fact] অ্যাট্রিবিউট

[Fact] অ্যাট্রিবিউট দিয়ে xUnit এ একটি টেস্ট মেথড চিহ্নিত করা হয়। টেস্ট মেথডে কোনো ইনপুট বা ভেরিয়েশন লাগবে না এমন ক্ষেত্রে এটি ব্যবহার করা হয়।


[Theory] এবং [InlineData] অ্যাট্রিবিউট

যদি একই মেথডে বিভিন্ন ইনপুট দিয়ে টেস্ট চালাতে হয়, তাহলে [Theory] এবং [InlineData] অ্যাট্রিবিউট ব্যবহার করা হয়।

উদাহরণ: [Theory] এবং [InlineData]

public class CalculatorTests
{
    [Theory]
    [InlineData(5, 3, 8)]
    [InlineData(10, 20, 30)]
    [InlineData(-5, -3, -8)]
    public void Add_ReturnsCorrectResult(int a, int b, int expected)
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.Equal(expected, result);
    }
}

এখানে [Theory] এবং [InlineData] ব্যবহার করে বিভিন্ন ইনপুট দিয়ে একাধিক টেস্ট চালানো হয়েছে।


Assert মেথড

Assert ক্লাস xUnit এ বিভিন্ন ধরনের টেস্ট ভেরিফিকেশন (যাচাই) করার জন্য মেথড সরবরাহ করে। কিছু গুরুত্বপূর্ণ Assert মেথডের উদাহরণ নিচে দেওয়া হলো:

  • Assert.Equal(expected, actual): প্রত্যাশিত এবং প্রকৃত মান মিলছে কিনা যাচাই করে।
  • Assert.NotEqual(expected, actual): প্রত্যাশিত এবং প্রকৃত মান মেলে না কিনা যাচাই করে।
  • Assert.True(condition): শর্তটি true কিনা যাচাই করে।
  • Assert.False(condition): শর্তটি false কিনা যাচাই করে।
  • Assert.Null(object): অবজেক্ট null কিনা যাচাই করে।
  • Assert.NotNull(object): অবজেক্ট null না হলে যাচাই করে।
  • Assert.Throws<Exception>(Action): একটি নির্দিষ্ট এক্সেপশন থ্রো হচ্ছে কিনা যাচাই করে।

Assert.Throws উদাহরণ

ধরা যাক, Calculator ক্লাসে এমন একটি মেথড আছে যা শূন্য দ্বারা ভাগ করতে গেলে একটি DivideByZeroException থ্রো করবে।

public int Divide(int a, int b)
{
    if (b == 0)
    {
        throw new DivideByZeroException("Cannot divide by zero.");
    }
    return a / b;
}

এর টেস্ট মেথডটি নিচের মতো হতে পারে:

[Fact]
public void Divide_ThrowsDivideByZeroException()
{
    // Arrange
    var calculator = new Calculator();

    // Act & Assert
    Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));
}

এখানে Assert.Throws<DivideByZeroException> ব্যবহার করে যাচাই করা হয়েছে যে Divide মেথডে b এর মান 0 হলে DivideByZeroException থ্রো হচ্ছে কিনা।


Mocking এবং Dependency Injection

ইউনিট টেস্টিংয়ের সময় অনেক সময় নির্দিষ্ট ডিপেন্ডেন্সি বা সার্ভিসের ব্যবহার করা হয়, যেটা সরাসরি টেস্ট করা কঠিন। এক্ষেত্রে Mocking এবং Dependency Injection ব্যবহার করা হয়। Moq নামক লাইব্রেরি ব্যবহার করে মক অবজেক্ট তৈরি করা যায়।

Moq ইনস্টল করা

Install-Package Moq

Moq ব্যবহার করে Mock Object তৈরি করা

ধরা যাক, আমাদের EmployeeService ক্লাসে ILogger ইন্টারফেসের একটি ডিপেন্ডেন্সি আছে:

public class EmployeeService
{
    private readonly ILogger _logger;

    public EmployeeService(ILogger logger)
    {
        _logger = logger;
    }

    public string GetEmployeeName(int id)
    {
        _logger.Log("Fetching employee name...");
        return "John Doe";
    }
}

এখন ILogger কে Mock করে টেস্ট লেখা হলো:

using Moq;
using Xunit;

public class EmployeeServiceTests
{
    [Fact]
    public void GetEmployeeName_LogsMessage()
    {
        // Arrange
        var mockLogger = new Mock<ILogger>();
        var service = new EmployeeService(mockLogger.Object);

        // Act
        string name = service.GetEmployeeName(1);

        // Assert
        mockLogger.Verify(logger => logger.Log("Fetching employee name..."), Times.Once);
    }
}

এখানে Verify মেথড দিয়ে যাচাই করা হয়েছে যে ILogger.Log() একবার কল হয়েছে কিনা।


সংক্ষেপে

  1. xUnit, NUnit, MSTest: সি# এ জনপ্রিয় ইউনিট টেস্টিং ফ্রেমওয়ার্ক।
  2. [Fact] এবং [Theory]: টেস্ট মেথড চিহ্নিত করতে ব্যবহৃত।
  3. Arrange, Act, Assert: ইউনিট টেস্টিং পদ্ধতির মানানসই ধাপ।
  4. Assert মেথড: টেস্ট ভ্যালিডেশন করার জন্য ব্যবহৃত।
  5. Mocking: নির্দিষ্ট ডিপেন্ডেন্সিকে টেস্ট করতে মক অবজেক্ট ব্যবহার।

ইউনিট টেস্টিং ব্যবহার করে কোডের নির্ভুলতা যাচাই করা সহজ হয় এবং ত্রুটি দ্রুত শনাক্ত করা যায়। xUnit বা Moq-এর মত ফ্রেমওয়ার্ক ও টুল ব্যবহার করে সি# এ ইউনিট টেস্টিং আরও কার্যকর এবং সহজ হয়।

Content added By

ইউনিট টেস্ট কী এবং এর প্রয়োজনীয়তা

ইউনিট টেস্ট হলো এমন একটি প্রক্রিয়া যেখানে সফটওয়ারের একক ইউনিট বা ছোট অংশকে পরীক্ষা করা হয়, যাতে নিশ্চিত করা যায় যে এটি সঠিকভাবে কাজ করছে। সাধারণত, একটি ইউনিট টেস্ট একটি নির্দিষ্ট মেথড বা ফাংশনের জন্য লেখা হয় এবং এটি সেই মেথডটির প্রত্যাশিত আউটপুট প্রদান করছে কি না তা যাচাই করে। ইউনিট টেস্টিং উন্নয়ন প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ এবং এটি স্বয়ংক্রিয় পরীক্ষার জন্য ব্যবহৃত হয়।

ইউনিট টেস্টের প্রয়োজনীয়তা

  1. ত্রুটি নির্ণয় সহজ করে: ইউনিট টেস্টের মাধ্যমে কোডের একটি ছোট অংশ (যেমন মেথড) একা পরীক্ষা করা হয়, তাই সমস্যা কোথায় ঘটছে তা সহজে চিহ্নিত করা যায়।
  2. বিশ্বাসযোগ্যতা বৃদ্ধি: প্রতিটি ইউনিট সঠিকভাবে কাজ করছে কি না তা নিশ্চিত করার ফলে কোডের গুণগত মান বৃদ্ধি পায়।
  3. রিফ্যাক্টরিং করা সহজ: কোড পরিবর্তন (রিফ্যাক্টরিং) করার সময় ইউনিট টেস্ট সহায়তা করে। নতুন কোড যুক্ত করলে ত্রুটি হলে তা ইউনিট টেস্টের মাধ্যমে ধরা যায়।
  4. ডকুমেন্টেশন হিসেবে কাজ করে: ইউনিট টেস্ট কোড কীভাবে কাজ করে তা ব্যাখ্যা করতে পারে, যা কোডের ডকুমেন্টেশনের মতো সহায়ক।
  5. সহজ মেনটেন্যান্স: নতুন ফিচার যুক্ত করার সময় আগের ইউনিট টেস্টগুলো চালানোর মাধ্যমে নিশ্চিত হওয়া যায় যে, পূর্বের ফিচারগুলোতে কোনো সমস্যা তৈরি হয়নি।

উদাহরণ: ইউনিট টেস্ট লিখা (NUnit ব্যবহার করে)

NUnit C# এ একটি জনপ্রিয় ইউনিট টেস্টিং ফ্রেমওয়ার্ক। এখানে একটি সাধারণ মেথডের ইউনিট টেস্ট উদাহরণ দেখানো হলো।

ধরা যাক, একটি ক্যালকুলেটর ক্লাস রয়েছে, যার একটি মেথড যোগফল প্রদান করে:

csharp

Copy code

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

NUnit ব্যবহার করে এর জন্য একটি ইউনিট টেস্ট লিখা

১. Visual Studio তে NUnit প্যাকেজটি ইন্সটল করুন। Package Manager Console এ নিচের কমান্ডটি রান করুন:

Install-Package NUnit
Install-Package NUnit3TestAdapter

২. প্রজেক্টে একটি নতুন ইউনিট টেস্ট ক্লাস তৈরি করুন। CalculatorTests.cs নামে একটি ফাইল তৈরি করুন এবং নিচের কোডটি লিখুন:

using NUnit.Framework;

[TestFixture]
public class CalculatorTests
{
    [Test]
    public void Add_WhenCalled_ReturnsSum()
    {
        // Arrange
        var calculator = new Calculator();
        
        // Act
        var result = calculator.Add(2, 3);
        
        // Assert
        Assert.AreEqual(5, result);
    }
}

ব্যাখ্যা

  • [TestFixture]: টেস্ট ক্লাসকে নির্দেশ করে। CalculatorTests টেস্ট ফ্রেমওয়ার্কে একটি টেস্ট ক্লাস হিসেবে ব্যবহৃত হবে।
  • [Test]: Add_WhenCalled_ReturnsSum মেথডটি একটি টেস্ট মেথড হিসেবে চিহ্নিত হয়েছে।
  • Arrange-Act-Assert (AAA) প্যাটার্ন:
    • Arrange: টেস্টে প্রয়োজনীয় অবজেক্ট বা ভেরিয়েবল প্রস্তুত করা।
    • Act: টেস্টের আসল কাজটি (ক্যালকুলেশন) করা।
    • Assert: টেস্টের প্রত্যাশিত আউটপুটটি নির্ধারণ করা এবং তা সত্য কিনা যাচাই করা।

NUnit এ ইউনিট টেস্ট চালানো

Visual Studio তে Test Explorer খুলুন এবং Run All এ ক্লিক করুন। টেস্ট সফল হলে সবুজ চিহ্ন দেখাবে এবং ব্যর্থ হলে লাল চিহ্ন দেখাবে।


ইউনিট টেস্ট লেখার সেরা পদ্ধতি

  1. একটি টেস্টে একটি কাজ: প্রতিটি ইউনিট টেস্টে শুধুমাত্র একটি কাজ বা ফাংশনালিটি পরীক্ষা করুন।
  2. প্রত্যাশিত এবং অপ্রত্যাশিত ইনপুট টেস্ট করা: বিভিন্ন ধরনের ইনপুট দিয়ে ইউনিট টেস্ট চালান, যেমন সঠিক ইনপুট, ভুল ইনপুট, সীমার কাছাকাছি ইনপুট ইত্যাদি।
  3. নিয়মিত টেস্ট চালানো: কোড পরিবর্তনের পর নিয়মিতভাবে টেস্ট চালান, যা সমস্যা দ্রুত চিহ্নিত করতে সাহায্য করে।
  4. রিফ্যাক্টরিংয়ের সময় টেস্ট চালানো: কোডে কোনো পরিবর্তন করলে পুরানো টেস্টগুলো চালিয়ে দেখুন, যাতে আগের ফিচারগুলো ঠিক আছে কিনা নিশ্চিত হওয়া যায়।
  5. টেস্টের নামকরণ: টেস্টের নাম অর্থবহ হওয়া উচিত, যেমন Add_WhenCalled_ReturnsSum, যা স্পষ্টভাবে বলে দেয় মেথডটি কী টেস্ট করছে।

ইউনিট টেস্ট এবং টেস্টিং ফ্রেমওয়ার্কের প্রয়োজনীয়তা

  1. স্বয়ংক্রিয় পরীক্ষা: ম্যানুয়াল টেস্টিংয়ের পরিবর্তে স্বয়ংক্রিয় টেস্টিং দ্রুত এবং নির্ভরযোগ্য। NUnit, xUnit, MSTest ইত্যাদি টেস্টিং ফ্রেমওয়ার্কগুলো এই সুবিধা প্রদান করে।
  2. সম্ভাব্য বাগ চিহ্নিতকরণ: কোডে সমস্যা হলে তা দ্রুত চিহ্নিত হয় এবং উন্নয়ন প্রক্রিয়া দ্রুত সম্পন্ন হয়।
  3. সহজ ডিবাগিং এবং মেনটেন্যান্স: ইউনিট টেস্টের মাধ্যমে উন্নয়ন সহজ হয় এবং পরিবর্তনের সময় বাগ কম হয়।

সংক্ষেপে

  • ইউনিট টেস্ট: ছোট ইউনিট বা মেথড টেস্ট করার প্রক্রিয়া।
  • প্রয়োজনীয়তা: ত্রুটি নির্ণয়, রিফ্যাক্টরিং, ডকুমেন্টেশন, মেনটেন্যান্স এবং কোডের গুণগত মান বৃদ্ধির জন্য।
  • NUnit উদাহরণ: C# এ ইউনিট টেস্টের জন্য জনপ্রিয় একটি ফ্রেমওয়ার্ক, যা সহজেই প্রজেক্টে যোগ করা যায়।

ইউনিট টেস্টিং সফটওয়ারের গুণগত মান বৃদ্ধি করতে এবং উন্নয়ন প্রক্রিয়া সহজ করতে সহায়ক, যা প্রায় প্রতিটি বড় প্রজেক্টে অপরিহার্য।

Content added By

MSTest এবং NUnit ব্যবহার করে টেস্ট লেখা

সি# এ MSTest এবং NUnit হলো জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক, যা ইউনিট টেস্টিংয়ের জন্য ব্যবহার করা হয়। MSTest Microsoft এর অফিসিয়াল টেস্ট ফ্রেমওয়ার্ক, আর NUnit একটি তৃতীয় পক্ষের ফ্রেমওয়ার্ক, যা শক্তিশালী ও সম্প্রসারণযোগ্য টেস্টিং ফিচার প্রদান করে।


MSTest দিয়ে টেস্ট লেখা

ধাপ ১: MSTest টেস্ট প্রজেক্ট তৈরি করা

Visual Studio তে MSTest টেস্ট প্রজেক্ট তৈরি করতে:

  1. Solution Explorer এ প্রজেক্টের উপর রাইট-ক্লিক করুন এবং Add -> New Project নির্বাচন করুন।
  2. MSTest Test Project নির্বাচন করুন।
  3. প্রজেক্টের নাম দিন, উদাহরণস্বরূপ, "MyProject.Tests"।

ধাপ ২: MSTest দিয়ে টেস্ট লিখুন

ধরা যাক, একটি Calculator ক্লাস আছে, যা দুটি সংখ্যা যোগ করে এবং Add মেথডের জন্য একটি টেস্ট লিখবো।

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

MSTest টেস্ট ক্লাস

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_ReturnsCorrectResult()
    {
        // Arrange
        var calculator = new Calculator();
        int a = 5;
        int b = 3;
        int expected = 8;

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.AreEqual(expected, result);
    }
}

ব্যাখ্যা

  • [TestClass]: এই অ্যাট্রিবিউট দিয়ে একটি ক্লাসকে টেস্ট ক্লাস হিসেবে চিহ্নিত করা হয়।
  • [TestMethod]: এই অ্যাট্রিবিউট দিয়ে একটি মেথডকে টেস্ট মেথড হিসেবে চিহ্নিত করা হয়।
  • Assert.AreEqual(expected, actual): MSTest এ Assert.AreEqual ব্যবহার করে প্রত্যাশিত এবং প্রাপ্ত মান যাচাই করা হয়।

[DataRow] এবং [DataTestMethod] ব্যবহার করে মাল্টিপল ইনপুট দিয়ে টেস্ট চালানো

MSTest এ [DataTestMethod] এবং [DataRow] ব্যবহার করে বিভিন্ন ইনপুট দিয়ে টেস্ট চালানো যায়।

[TestClass]
public class CalculatorTests
{
    [DataTestMethod]
    [DataRow(5, 3, 8)]
    [DataRow(10, 20, 30)]
    [DataRow(-5, -3, -8)]
    public void Add_ReturnsCorrectResult(int a, int b, int expected)
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.AreEqual(expected, result);
    }
}

এখানে [DataRow] ব্যবহার করে বিভিন্ন ইনপুট দিয়ে Add মেথডের ফলাফল যাচাই করা হয়েছে।


NUnit দিয়ে টেস্ট লেখা

ধাপ ১: NUnit টেস্ট প্রজেক্ট তৈরি করা

Visual Studio তে NUnit টেস্ট প্রজেক্ট তৈরি করতে:

  1. Solution Explorer এ প্রজেক্টের উপর রাইট-ক্লিক করুন এবং Add -> New Project নির্বাচন করুন।
  2. NUnit Test Project নির্বাচন করুন।
  3. প্রজেক্টের নাম দিন, উদাহরণস্বরূপ, "MyProject.Tests"।

ধাপ ২: NUnit দিয়ে টেস্ট লিখুন

Calculator ক্লাসের জন্য NUnit ব্যবহার করে টেস্ট লেখার উদাহরণ দেওয়া হলো।

NUnit টেস্ট ক্লাস

using NUnit.Framework;

[TestFixture]
public class CalculatorTests
{
    [Test]
    public void Add_ReturnsCorrectResult()
    {
        // Arrange
        var calculator = new Calculator();
        int a = 5;
        int b = 3;
        int expected = 8;

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.AreEqual(expected, result);
    }
}

ব্যাখ্যা

  • [TestFixture]: এই অ্যাট্রিবিউট দিয়ে একটি ক্লাসকে NUnit টেস্ট ক্লাস হিসেবে চিহ্নিত করা হয়।
  • [Test]: এই অ্যাট্রিবিউট দিয়ে একটি মেথডকে NUnit টেস্ট মেথড হিসেবে চিহ্নিত করা হয়।
  • Assert.AreEqual(expected, actual): NUnit এ Assert.AreEqual ব্যবহার করে প্রত্যাশিত এবং প্রাপ্ত মান যাচাই করা হয়।

[TestCase] ব্যবহার করে মাল্টিপল ইনপুট দিয়ে টেস্ট চালানো

NUnit এ [TestCase] অ্যাট্রিবিউট ব্যবহার করে বিভিন্ন ইনপুট দিয়ে টেস্ট চালানো যায়।

[TestFixture]
public class CalculatorTests
{
    [TestCase(5, 3, 8)]
    [TestCase(10, 20, 30)]
    [TestCase(-5, -3, -8)]
    public void Add_ReturnsCorrectResult(int a, int b, int expected)
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        int result = calculator.Add(a, b);

        // Assert
        Assert.AreEqual(expected, result);
    }
}

এখানে [TestCase] ব্যবহার করে একাধিক ইনপুট দিয়ে Add মেথডের জন্য টেস্ট লেখা হয়েছে।


MSTest এবং NUnit এর Assert মেথড

MSTest এবং NUnit উভয় ফ্রেমওয়ার্কে Assert মেথডের মাধ্যমে টেস্ট ভ্যালিডেশন করা হয়। নিচে কিছু সাধারণ Assert মেথড দেওয়া হলো:

MSTest AssertNUnit Assertকাজ
Assert.AreEqual(a, b)Assert.AreEqual(a, b)দুই মান সমান কিনা যাচাই করা
Assert.AreNotEqual(a, b)Assert.AreNotEqual(a, b)দুই মান সমান নয় কিনা যাচাই করা
Assert.IsTrue(condition)Assert.IsTrue(condition)শর্তটি সত্য কিনা যাচাই করা
Assert.IsFalse(condition)Assert.IsFalse(condition)শর্তটি মিথ্যা কিনা যাচাই করা
Assert.IsNull(object)Assert.IsNull(object)অবজেক্টটি null কিনা যাচাই করা
Assert.IsNotNull(object)Assert.IsNotNull(object)অবজেক্টটি null নয় কিনা যাচাই করা
Assert.Throws<Exception>(Action)Assert.Throws<Exception>(Action)একটি নির্দিষ্ট এক্সেপশন থ্রো হচ্ছে কিনা যাচাই করা

NUnit এ Exception টেস্ট করা

একটি নির্দিষ্ট এক্সেপশন থ্রো হচ্ছে কিনা যাচাই করার জন্য NUnit এ Assert.Throws<Exception> ব্যবহার করা হয়।

[Test]
public void Divide_ThrowsDivideByZeroException()
{
    // Arrange
    var calculator = new Calculator();

    // Act & Assert
    Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));
}

এই টেস্ট যাচাই করবে যে Divide মেথডে শূন্য দ্বারা ভাগ করলে DivideByZeroException থ্রো হচ্ছে কিনা।


সংক্ষেপে MSTest এবং NUnit ব্যবহার করে টেস্টিং

বৈশিষ্ট্যMSTestNUnit
টেস্ট ক্লাস চিহ্নিতকরণ[TestClass][TestFixture]
টেস্ট মেথড চিহ্নিতকরণ[TestMethod][Test]
ডেটা ড্রাইভেন টেস্ট[DataTestMethod], [DataRow][TestCase]
Exception যাচাইAssert.Throws<Exception>(Action)Assert.Throws<Exception>(Action)

MSTest এবং NUnit উভয় ফ্রেমওয়ার্কই C# এ টেস্ট লেখার জন্য শক্তিশালী ও জনপ্রিয়। MSTest Microsoft এর অফিসিয়াল ফ্রেমওয়ার্ক এবং Visual Studio তে বিল্ট-ইন সাপোর্ট করে, আর NUnit অনেক বেশি সম্প্রসারণযোগ্য এবং তৃতীয় পক্ষের প্রোজেক্টে ব্যবহার করা হয়। ইউনিট টেস্টিংয়ের মাধ্যমে কোডের নির্ভুলতা যাচাই করা সহজ হয় এবং বিভিন্ন বাগ বা ত্রুটি শনাক্ত করা সম্ভব হয়।

Content added By

টেস্ট কেস তৈরি এবং রান করা

টেস্ট কেস তৈরি করা হলো সফটওয়্যার টেস্টিংয়ের একটি গুরুত্বপূর্ণ ধাপ, যেখানে নির্দিষ্ট কিছু শর্ত, ইনপুট এবং প্রত্যাশিত ফলাফল দিয়ে ফাংশন বা মেথডের কার্যকারিতা যাচাই করা হয়। প্রতিটি টেস্ট কেস কোডের নির্দিষ্ট অংশের কার্যকারিতা নিশ্চিত করে, ফলে ত্রুটি সহজেই চিহ্নিত করা যায়।

নিচে C# এ NUnit ফ্রেমওয়ার্ক ব্যবহার করে একটি টেস্ট কেস তৈরি এবং রান করার প্রক্রিয়া ব্যাখ্যা করা হলো।

টেস্ট কেসের মূল কাঠামো

প্রত্যেক টেস্ট কেসে তিনটি ধাপ থাকে:

  1. Arrange: টেস্টের প্রয়োজনীয় সেটআপ বা ইনপুট ডেটা প্রস্তুত করা।
  2. Act: টেস্টে ফাংশন বা মেথড কল করা, যা পরীক্ষা করতে চাই।
  3. Assert: আউটপুট প্রত্যাশিত মানের সাথে মিলিয়ে দেখা।

উদাহরণ: একটি টেস্ট কেস তৈরি করা

ধরা যাক, আমাদের একটি Calculator ক্লাস রয়েছে যেখানে Add মেথড আছে, যা দুইটি সংখ্যা যোগ করে।

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

NUnit দিয়ে টেস্ট কেস তৈরি করা

১. Visual Studio তে NUnit প্যাকেজ ইনস্টল করুন। Package Manager Console এ নিচের কমান্ডটি রান করুন:

Install-Package NUnit
Install-Package NUnit3TestAdapter

২. CalculatorTests.cs নামে একটি নতুন টেস্ট ক্লাস তৈরি করুন এবং নিচের কোড লিখুন:

using NUnit.Framework;

[TestFixture]
public class CalculatorTests
{
    private Calculator _calculator;

    [SetUp]
    public void Setup()
    {
        _calculator = new Calculator();
    }

    [Test]
    public void Add_WhenCalled_ReturnsSum()
    {
        // Arrange
        int a = 5;
        int b = 10;

        // Act
        int result = _calculator.Add(a, b);

        // Assert
        Assert.AreEqual(15, result);
    }
}

ব্যাখ্যা

  1. [TestFixture]: CalculatorTests ক্লাসটিকে টেস্ট ক্লাস হিসেবে চিহ্নিত করেছে।
  2. [SetUp]: Setup মেথডটি প্রতিটি টেস্টের আগে রান হয়। এটি Calculator ক্লাসের একটি ইনস্ট্যান্স তৈরি করে।
  3. [Test]: Add_WhenCalled_ReturnsSum মেথডটিকে একটি টেস্ট কেস হিসেবে চিহ্নিত করা হয়েছে।
  4. Arrange, Act, Assert:
    • Arrange: a এবং b নামে দুটি ভেরিয়েবল তৈরি করা হয়েছে।
    • Act: _calculator.Add(a, b) এর মাধ্যমে যোগফল গণনা করা হয়েছে।
    • Assert: Assert.AreEqual(15, result); দিয়ে যাচাই করা হয়েছে যে যোগফল ১৫ হওয়া উচিত।

টেস্ট কেস রান করা

Visual Studio তে Test Explorer এ যান এবং Run All ক্লিক করুন।

  • সবুজ চিহ্ন দেখায় যে টেস্ট সফল হয়েছে।
  • লাল চিহ্ন দেখায় যে টেস্ট ব্যর্থ হয়েছে।

আরো কিছু টেস্ট কেস যোগ করা

ধরা যাক, Calculator ক্লাসে একটি Subtract মেথড আছে যা দুইটি সংখ্যা বিয়োগ করে।

public int Subtract(int a, int b)
{
    return a - b;
}

Subtract মেথডের জন্য একটি নতুন টেস্ট কেস যোগ করা যেতে পারে:

[Test]
public void Subtract_WhenCalled_ReturnsDifference()
{
    // Arrange
    int a = 10;
    int b = 5;

    // Act
    int result = _calculator.Subtract(a, b);

    // Assert
    Assert.AreEqual(5, result);
}

ব্যাখ্যা

  • এই টেস্ট কেসে Subtract মেথডে a = 10 এবং b = 5 দিয়ে বিয়োগফল হিসেবে ৫ প্রত্যাশা করা হয়েছে।
  • Assert চেক করে যে ফলাফল ৫ কিনা।

টেস্ট কেসের সেরা প্র্যাকটিস

  1. একটি টেস্ট একটি কাজ করে: প্রতিটি টেস্ট কেসে একটি ফাংশন বা মেথডের জন্য একটি কাজ পরীক্ষা করুন।
  2. প্রত্যাশিত এবং অপ্রত্যাশিত ইনপুট চেক করা: ফাংশনটি বিভিন্ন ধরনের ইনপুটে সঠিকভাবে কাজ করছে কিনা তা যাচাই করুন।
  3. নাম অর্থবহ করা: টেস্ট কেসের নাম অর্থবহ হওয়া উচিত যাতে স্পষ্ট হয় যে এটি কী পরীক্ষা করছে।
  4. পরীক্ষার ফলাফল ডকুমেন্টেশন: টেস্টের ফলাফল বা আউটপুট ভালোভাবে ডকুমেন্ট করুন।

সংক্ষেপে

  • টেস্ট কেস: একটি নির্দিষ্ট ফাংশনের কার্যকারিতা পরীক্ষা করার জন্য লেখা হয়।
  • NUnit: C# এ ইউনিট টেস্টিং এর জন্য একটি জনপ্রিয় ফ্রেমওয়ার্ক।
  • Arrange-Act-Assert: টেস্ট কেস লেখার আদর্শ কাঠামো।
  • Test Explorer: Visual Studio তে টেস্ট কেস রান ও ফলাফল দেখার জন্য।

এইভাবে C# এ NUnit ব্যবহার করে টেস্ট কেস তৈরি ও রান করা যায়, যা কোডের গুণগত মান এবং নির্ভরযোগ্যতা বৃদ্ধি করে।

Content added By
Promotion